iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0
Everything on Azure

Azure Service 實作 ( Blockchain、AI、 Serverless Architecture)系列 第 28

28. Azure Blockchain Workbench 使用(2)Asset Transfer

  • 分享至 

  • xImage
  •  

今天要來繼續講有關 Azure Blockchain Workbench 的實際使用,上一篇我們看到了要將應用程式上傳到 Azure Blockchain Workbench 提供的網頁,需要兩個檔案:.json.sol,其中.json裡面寫了有關我們智能合約的功能以及包含的角色權限等,Azure Blockchain Workbench 會根據此份設定檔產生網頁介面。

.sol檔案其實和我們之前寫 Smart Contract 相同,一樣是使用 Solidity 語言。

因為篇幅關係,不會把智能合約的寫法從頭介紹,有興趣的朋友可以參考這本中文電子書
並且搭配官方文件使用:https://solidity.readthedocs.io/en/v0.4.24/

合約內容

Azure Blockchain Workbench 中每個合約都會繼承 WorkbenchBase 合約,如下:

contract 合約名稱 is WorkbenchBase('填上applicationName', '填上workflowName')

WorkbenchBase 合約內容如下:

其中包含兩個 EventWorkbenchContractCreatedWorkbenchContractUpdated,當合約觸發相關事件時用來通知 Azure Blockchain workbench 的其他服務。

contract WorkbenchBase {
    event WorkbenchContractCreated(string applicationName, string workflowName, address originatingAddress);
    event WorkbenchContractUpdated(string applicationName, string workflowName, string action, address originatingAddress);

    string internal ApplicationName;
    string internal WorkflowName;

    function WorkbenchBase(string applicationName, string workflowName) internal {
        ApplicationName = applicationName;
        WorkflowName = workflowName;
    }
    //  合約創建時觸發
    function ContractCreated() internal {
        WorkbenchContractCreated(ApplicationName, WorkflowName, msg.sender);
    }
    
    //  合約相關狀態更新時觸發
    function ContractUpdated(string action) internal {
        WorkbenchContractUpdated(ApplicationName, WorkflowName, action, msg.sender);
    }
}

範例

接著參考以下範例,一樣把 .sol 檔案與 .json 檔下載後上傳到應用程式網頁上。
https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/asset-transfer/ethereum/AssetTransfer.sol

這個範例的功能是可以讓使用者互相刊登物品與販售物品。

https://ithelp.ithome.com.tw/upload/images/20181108/20112426tFmNZy57dy.png

當我們加入一個使用者為 owner 後可以看到畫面上多了一個 New Contract 按鈕,點選後可以新增一個物品,並設定價格。
https://ithelp.ithome.com.tw/upload/images/20181108/201124262OVdbqbdHp.png

如此動作網頁就會發送 API 請求給後端,由後端觸發智能合約上面的相關函式。

再來看一下 Network:可以看到相關 transaction Hash 但因為 Azure 是自己架設的 Private Ethereum network 所以不會出現在 MainnetTestnetEtherscan 上面。
https://ithelp.ithome.com.tw/upload/images/20181108/20112426nYpcjGqyIW.png

點擊下去剛才新增的品項,可以看到一些資訊,Azure 幫我們抓好區塊鏈的資料顯示到網頁上。
https://ithelp.ithome.com.tw/upload/images/20181108/20112426cx4urGe5bA.png

加入使用者到合約應用程式中

可以從 portal 如下加入訪客使用者:
https://ithelp.ithome.com.tw/upload/images/20181108/20112426x8azOTwUSR.png

使用訪客使用者的話只需要對方的信箱即可,但對方接到邀請信後還是要點進去按確認然後 Azure 會幫他註冊一個帳號。

然後到應用程式網站點選 Add a member 加入剛才新增的使用者即可。

https://ithelp.ithome.com.tw/upload/images/20181108/20112426Gsn6D0bXBH.png

之後以另一個瀏覽器開啟應用程式網頁,用訪客帳號登入,然後發出 Offer 購買該物品。

https://ithelp.ithome.com.tw/upload/images/20181108/2011242650AkyvpHWS.png

我們來看一下 .solMakeOffer 的程式碼:

function MakeOffer(address inspector, address appraiser, uint256 offerPrice) public
    {
        if (inspector == 0x0 || appraiser == 0x0 || offerPrice == 0)
        {
            revert();
        }
        if (State != StateType.Active)
        {
            revert();
        }
        // Cannot enforce "AllowedRoles":["Buyer"] because Role information is unavailable
        if (InstanceOwner == msg.sender) // not expressible in the current specification language
        {
            revert();
        }

        InstanceBuyer = msg.sender;
        InstanceInspector = inspector;
        InstanceAppraiser = appraiser;
        OfferPrice = offerPrice;
        State = StateType.OfferPlaced;
        ContractUpdated('MakeOffer');
    }

其中要執行 MakeOffer 的話,還需要兩個人:inspectorappraiser。而要完成此函式的話,其中offerPrice 不可為 0,以及發出 offer 的人不可以是刊登物品的人。

官方這個範例合約只會幫你做紀錄,金額不會真的用例如 transfer 之方法來進行轉帳。

如果發出 Offer 後網頁上以下三個欄位會顯示相關的人名:
https://ithelp.ithome.com.tw/upload/images/20181108/20112426OVR7idUTbo.png

以上就大致完成了這個合約的最基本功能:發出 offer 以及買家購買,並且在智能合約上做記錄,然後顯示於網頁上。

各位如果有興趣可以參考其他官方範例玩一下:
https://github.com/Azure-Samples/blockchain/tree/master/blockchain-workbench/application-and-smart-contract-samples


上一篇
27. Azure Blockchain Workbench 使用(1)介面使用
下一篇
29. Azure Blockchain Workbench 使用(3)用 API 存取資料
系列文
Azure Service 實作 ( Blockchain、AI、 Serverless Architecture)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言